package com.sinaapp.gavinzhang.GSpider;

import com.sinaapp.gavinzhang.GSpider.http.HttpServer;
import com.sinaapp.gavinzhang.GSpider.management.RegistrationCenter;
import com.sinaapp.gavinzhang.GSpider.process.ProcessorManagement;
import com.sinaapp.gavinzhang.GSpider.webaddress.URLManagement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.List;

/**
 * @author gavin
 * @version 1.0
 * @date 2016/3/19
 * @description 启动类
 */
public class GSpider {

    private static Logger logger = LoggerFactory.getLogger(GSpider.class);

    public static void main(String[] args) throws Exception {
        String lizi = "例子:\n\tcenter\n\turl\n\thttpserver\n\tprocessor";
        String wanzhenglizi = "完整示例:\n\tcenter -p20000\t<注册中心端口号设为20000>\n";
        wanzhenglizi += "\n\turl -ip127.0.0.1\t<注册中心ip设为127.0.0.1>";
        wanzhenglizi += "\n\turl -localport20001\t<网址管理器端口号设为20001>";
        wanzhenglizi += "\n\turl -ip127.0.0.1 -port20000\t<注册中心ip,端口号设置>";
        wanzhenglizi += "\n\turl -ip127.0.0.1 -port20000 -localport20001\t<注册中心ip,端口号设置,网址管理器端口号>\n";
        wanzhenglizi += "\n\thttpserver -ip127.0.0.1\t<注册中心ip设为127.0.0.1>";
        wanzhenglizi += "\n\thttpserver -localport8080\t<配置状态管理器端口号设为8080>";
        wanzhenglizi += "\n\thttpserver -ip127.0.0.1 -port20000\t<注册中心ip,端口号设置>";
        wanzhenglizi += "\n\thttpserver -ip127.0.0.1 -port20000 -localport8080\t<注册中心ip,端口号设置,配置状态管理器端口号>\n";
        wanzhenglizi += "\n\tprocessor -ip127.0.0.1\t<注册中心ip设为127.0.0.1>";
        wanzhenglizi += "\n\tprocessor -localport20002\t<抓取集群管理器端口号设为20002>";
        wanzhenglizi += "\n\tprocessor -ip127.0.0.1 -port20000\t<注册中心ip,端口号设置>";
        wanzhenglizi += "\n\tprocessor -ip127.0.0.1 -port20000 -localport20002\t<注册中心ip,端口号设置,抓取集群管理器端口号>\n";
        List<String> serverList = Arrays.asList(args);
        if (serverList.size() == 0) {
            System.out.println("请输入需要启动的服务");
            System.out.println(lizi);
            System.out.println(wanzhenglizi);
            System.exit(0);
        }

        //注册中心
        if (serverList.contains("center")) {
            logger.info("启动注册中心服务");
            if (serverList.size() == 1) {
                RegistrationCenter.setUp();
            } else if (serverList.size() == 2) {
                //指定端口号
                RegistrationCenter.setUp(Integer.valueOf(args[1].replace("-p", "")));
            }
            return;
        }

        //网址管理器
        if (serverList.contains("url")) {
            logger.info("启动网址管理服务");
            if (serverList.size() == 1) {
                URLManagement.setUp();
            } else if (serverList.size() == 2) {
                //指定注册中心IP
                if (args[1].contains("ip")) {
                    URLManagement.setUp(args[1].replace("-ip", ""));
                } else if (args[1].contains("localport")) {
                    //指定本地端口号
                    URLManagement.setUp(Integer.valueOf(args[1].replace("-localport", "")));
                } else {
                    logger.error("第二个参数设置有误:" + args[1]);
                }
            } else if (serverList.size() == 3) {
                //指定注册中心IP 端口号
                URLManagement.setUp(args[1].replace("-ip", ""), Integer.valueOf(args[2].replace("-port", "")));
            } else if (serverList.size() == 4) {
                //指定注册中心IP 端口号 本地端口号
                URLManagement.setUp(args[1].replace("-ip", ""), Integer.valueOf(args[2].replace("-port", "")), Integer.valueOf(args[3].replace("-localport", "")));
            }
            return;
        }

        //配置状态管理器(网页)
        if (serverList.contains("httpserver")) {
            logger.info("启动配置状态服务");
            if (serverList.size() == 1) {
                HttpServer.setUp();
            } else if (serverList.size() == 2) {
                //指定注册中心IP
                if (args[1].contains("ip")) {
                    HttpServer.setUp(args[1].replace("-ip", ""));
                } else if (args[1].contains("localport")) {
                    //指定本地端口号
                    HttpServer.setUp(Integer.valueOf(args[1].replace("-localport", "")));
                } else {
                    logger.error("第二个参数设置有误:" + args[1]);
                }
            } else if (serverList.size() == 3) {
                //指定注册中心IP 端口号
                HttpServer.setUp(args[1].replace("-ip", ""), Integer.valueOf(args[2].replace("-port", "")));
            } else if (serverList.size() == 4) {
                //指定注册中心IP 端口号 本地端口号
                HttpServer.setUp(args[1].replace("-ip", ""), Integer.valueOf(args[2].replace("-port", "")), Integer.valueOf(args[3].replace("-localport", "")));
            }
            return;
        }

        //抓取集群管理器
        if (serverList.contains("processor")) {
            logger.info("启动抓取集群");
            if (serverList.size() == 1) {
                ProcessorManagement.setUp();
            } else if (serverList.size() == 2) {
                //指定注册中心IP
                if (args[1].contains("ip")) {
                    ProcessorManagement.setUp(args[1].replace("-ip", ""));
                } else if (args[1].contains("localport")) {
                    //指定本地端口号
                    ProcessorManagement.setUp(Integer.valueOf(args[1].replace("-localport", "")));
                } else {
                    logger.error("第二个参数设置有误:" + args[1]);
                }
            } else if (serverList.size() == 3) {
                //指定注册中心IP 端口号
                ProcessorManagement.setUp(args[1].replace("-ip", ""), Integer.valueOf(args[2].replace("-port", "")));
            } else if (serverList.size() == 4) {
                //指定注册中心IP 端口号 本地端口号
                ProcessorManagement.setUp(args[1].replace("-ip", ""), Integer.valueOf(args[2].replace("-port", "")), Integer.valueOf(args[3].replace("-localport", "")));
            }
            return;
        }
        System.out.println("请输入需要启动的服务");
        System.out.println(lizi);
        System.out.println(wanzhenglizi);
        System.exit(0);

    }
}
